package JVM.第05篇_执行引擎篇;

/**
 * 概念解释:
 * ●Java语言的  “编译期”其实是一段“不确定”的操作过程，
 * 因为它可能是指一个前端编译器(其实叫“编译器的前端”更准确一些)
 * 把  .java 文件转变成  .class  文件的过程;
 * ●也可能是指虛拟机的后端运行期编译器
 * (JIT编译器，Just In Time Compiler)把字节码转变成机器码的过程。
 * ●还可能是指使用静态提前编译器(AOT编译器，Ahead Of TimeCompiler)
 * 直接把 .java文件编译成本地机器代码的过程。
 *
 * 前端编译器: Sun 的Javac、 Eclipse JDT中的增量式编译器(ECJ)。
 * JIT编译器: HotSpot VM的C1、C2编译器。
 * AOT编译器: GNU Compiler for the Java (GCJ) 、Excelsior JI
 *
 * HotSpotVM是目前市面上高性能虚拟机的代表作之一。
 * 它采用解释器与即时编译器并存的架构。
 *
 * 解释器工作机制(或工作任务)
 * 解释器真正意义上所承担的角色就是一个运行时“翻译者”，
 * 将字节码文件中的内容“翻译”为对应平台的本地机器指令执行。
 * 从这个角度说，java是解释语言。
 *
 * ●当一条字节码指令被解释执行完成后，接着再根据PC寄存器中记录的下一条需要被执
 * 行的字节码指令执行解释操作。
 *
 * JVM设计者们的初衷仅仅只是单纯地为了满足Java程序实现跨平台特性，
 * 因此避免采用静态编译的方式直接生成本地机器指令，
 * 从而诞生了实现解释器在运行时采用逐行解释字节码执行程序的想法。
 *
 * 什么是解释器(Interpreter) ?
 * 当Java虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行，
 * 将每条字节码文件中的内容“翻译”为对应平台的本地机器指令执行。
 *
 * 解释器分类
 * 在Java的发展历史里，一共有两套解释执行器，
 * 即古老的字节码解释器、现在普遍使用的模板解释器。
 * ●字节码解释器在执行时通过纯软件代码模拟字节码的执行，效率非常低下。
 * ●而模板解释器将每一条字节码和一个模板函数相关联，模板函数中直接产生这条字节码
 * 执行时的机器码，从而很大程度上提高了解释器的性能。
 *      ●在HotSpot VM中，解释器主要由Interpreter模块和Code模块构成。
 *              ●Interpreter模块: 实现了解释器的核心功能
 *              ●Code模块: 用于管理HotSpot VM在运行时生成的本地机器指令
 *
 *
 * 现状
 * ●由于解释器在设计和实现上非常简单，因此除了Java语言之外，还有许多高级语言同
 * 样也是基于解释器执行的，比如Python、 Perl、Ruby等。
 * 但是在今天，基于解释器执行已经沦落为低效的代名词，并且时常被一些C/C++程序员所调侃。
 * ●为了解决这个问题，JVM平台支持一种叫作即时编译的技术。
 * 即时编译的目的是避免函数被解释执行，而是将整个函数体编译成为机器码，
 * 每次函数执行时，只执行编译后的机器码即可，这种方式可以使执行效率大幅度提升。
 * ●不过无论如何，基于解释器的执行模式仍然为中间语言的发展做出了不可磨灭的贡献。
 */
public class C1_代码编译和执行的过程 {

}
